package com.tbit.uqbike.webmanager.dao.stat;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbit.config.datasource.DataSource;
import com.tbit.manager.api.dto.MachineOperationsStatDTO;
import com.tbit.manager.api.dto.MachineStatReturnDTO;
import com.tbit.uqbike.object.pojo.MachineOperationsStat;
import com.tbit.uqbike.object.pojo.vo.HasOrderMachineVO;
import com.tbit.uqbike.object.pojo.vo.MachineLineChartVO;
import com.tbit.uqbike.object.pojo.vo.MachineOperationsStatChartVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 车辆状态统计数据交互层
 *
 * @author <a href="mailto:yixingang@tbit.com.cn">yee_</a>
 * @version 1.0
 * @see <a href="#">#</a>
 * @since 2024/4/26
 */
@Mapper
@DS(DataSource.STAT)
public interface MachineOperationsStatDao extends BaseMapper<MachineOperationsStat> {

    List<MachineOperationsStatChartVO.MachineOperationsStatVO> selectMachineOperations(List<Integer> accountIds, String startTime,
                                                                                       String endTime, Integer dateType);

    /**
     * 查询产生订单车辆数
     *
     * @param accountIds 区域id列表
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return Map
     */
    List<HasOrderMachineVO> selectMachineOrderCount(@Param("accountIds") List<Integer> accountIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    List<HasOrderMachineVO> selectMachineOrderCountByDay(@Param("accountId") Integer integers, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * @description: 获取指定日期内所有时间点产生订单的车辆数
     * @author: mo.shanyong
     * @date: 2025/3/4 11:40
     * @param: accountId
     * @param: startTime 日期：2025-03-01
     * @return: java.util.List<com.tbit.manager.api.dto.MachineStatReturnDTO>
     */
    List<MachineStatReturnDTO> selectMachineOrderCountsInDay(@Param("accountId") Integer accountId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * @param accountId 区域id
     * @param startTime 时间
     * @return List<MachineLineChartVO>
     * @description: 获取指定日期内所有时间点的超区、站外、低电的车辆数
     */
    List<MachineLineChartVO> selectMachineLineChart(@Param("accountId") Integer accountId, @Param("startTime") String startTime);

    /**
     * 获取指定日期内所有时间点的超区、站外、低电的车辆数
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return List<MachineLineChartVO>
     */
    List<MachineLineChartVO> selectMachineLineChartByDay(@Param("accountId")Integer accountId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * @description: 获取闲置车辆统计
     * @author: mo.shanyong
     * @date: 2025/3/14 15:17
     * @param: accountId 区域Id
     * @param: startTime 开始时间
     * @param: endTime 结束时间
     * @return: java.util.List<com.tbit.manager.api.dto.MachineOperationsStatDTO>
     */
    List<MachineOperationsStatDTO> getIdleCarLineData(@Param("accountId")Integer accountId, @Param("startTime") String startTime, @Param("endTime") String endTime);
}
